package manager;

import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

import session.CursoSession;
import session.ProfessorSession;
import session.TurmaSession;
import util.FacesUtil;
import entidade.Aluno;
import entidade.Curso;
import entidade.Professor;
import entidade.Turma;

@Named
@RequestScoped
public class TurmaManager {
	@EJB
	private TurmaSession tSession;
	@EJB
	private CursoSession cSession;
	@EJB
	private ProfessorSession pSession;
	
	
	
	private Turma turma = new Turma();
	
	private List<Turma> turmas;
	private List<Aluno> alunosDaTurma;
	private List<Curso> cursos;
	private List<Professor> professores;
	
	private Integer idCurso;
	private Integer idTurma;
	private Integer idProfessor;
	private Integer vagasRestantes;
	
	public void save(){
		Curso curso = cSession.findById(idCurso);
		Professor prof = pSession.findById(idProfessor);
		turma.setCurso(curso);
		turma.setProfessor(prof);
		if(turma.getId() == null){
			tSession.insert(turma);
			
			turma = new Turma();
		}else{
			tSession.update(turma);
		}
		turma = new Turma();
	}
	
	public void excluir(Turma turma){
		try {
			tSession.delete(turma);
			
			turma = new Turma();
			turmas = null;
		} catch (Exception e) {
			FacesUtil.mensErro("Não foi possivel excluir, Verifique se existe aluno nessa turma");
			e.printStackTrace();
		}
	}
	
	public void prepararUpdate(Turma turma){
		this.turma = tSession.findById(turma.getId());
		this.idCurso = turma.getCurso().getId();
		this.idProfessor = turma.getProfessor().getId();
	}
	
	public List<Aluno> getAlunosDaTurma() {
		if(alunosDaTurma == null){
			return alunosDaTurma = tSession.alunosDaTurma(getIdTurma());
		}
		return alunosDaTurma;
	}
	
	public String direciona(Integer idTur){
		setIdTurma(idTur);
		turma = tSession.findById(idTur);
		return "turmaAluno";
	}

	public void setAlunosDaTurma(List<Aluno> alunosDaTurma) {
		this.alunosDaTurma = alunosDaTurma;
	}

	
	public Turma getTurma() {
		return turma;
	}

	public void setTurma(Turma turma) {
		this.turma = turma;
	}

	public Integer getIdCurso() {
		return idCurso;
	}

	public void setIdCurso(Integer idCurso) {
		this.idCurso = idCurso;
	}
	
	public List<Turma> getTurmas() {
		if(turmas == null){
			turmas = tSession.findAll();
		}
		return turmas;
	}

	public void setTurmas(List<Turma> turmas) {
		this.turmas = turmas;
	}
	public Integer getIdTurma() {
		return idTurma;
	}

	public void setIdTurma(Integer idTurma) {
		this.idTurma = idTurma;
	}

	public List<Curso> getCursos() {
		if(cursos == null){
			cursos = cSession.findAll();
		}
		return cursos ;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}
	
	public List<Professor> getProfessores() {
		if(professores == null){
			professores = pSession.findAll();
		}
		
		return professores;
	}

	public void setProfessores(List<Professor> professores) {
		this.professores = professores;
	}
	
	public Integer getIdProfessor() {
		return idProfessor;
	}
	public void setIdProfessor(Integer idProfessor) {
		this.idProfessor = idProfessor;
	}

	public Integer sizeTurma() {
		getAlunosDaTurma();
		return tSession.findById(getIdTurma()).getNumeroVagas()-alunosDaTurma.size();
	}
	
	public Integer getVagasRestantes() {
		return vagasRestantes;
	}

	public void setVagasRestantes(Integer vagasRestantes) {
		this.vagasRestantes = vagasRestantes;
	}
}